// 1、全选插件
$.fn.extend({
    // 功能：全选反选（调用该函数的对象是父复选框）    // 
    // 参数：子复选框，反选按钮
    checkAllBind($subCheck, unBtn) {

        this.change(function() {
            console.log("插件里的change");
            // 此函数是事件处理函数，所以，this是事件源。
            $(this).checkAll($subCheck)
        });

        $subCheck.change(() => {
            $subCheck.backCheck(this)
        });
        if (unBtn) {
            unBtn.click(() => {
                $subCheck.unCheck(this);
            });
        }
    },
    // 正向控制
    checkAll: function($subCheck) {
        // 此函数是对象的方法。
        // this: $("#checkallid")
        $subCheck.prop("checked", this.prop("checked"));
    },
    // 逆向控制
    // 参数：$parentCheck 全选的复选框
    backCheck($parentCheck) {
        // this:是 $("#box :checkbox")
        let allCheck = true;
        for (let i = 0; i < this.length; i++) {
            if (!$(this[i]).prop("checked")) {
                allCheck = false;
                break;
            }
        }
        $parentCheck.prop("checked", allCheck);
    },
    unCheck($parentCheck) {
        // this :$("#box :checkbox")
        for (let i = 0; i < this.length; i++) {
            $(this[i]).prop("checked", !$(this[i]).prop("checked"));
        }
        this.backCheck($parentCheck);
    }
});